package com.satan.juc.demo19;

import java.util.concurrent.LinkedTransferQueue;
/*
LinkedTransferQueue 是一个由链表结构组成的无界阻塞队列，它实现了 TransferQueue 接口。
这个队列结合了其他几种队列的特性：它可以统计长度，进行查询，具有高性能（使用 CAS 自旋），并且拥有阻塞功能。
LinkedTransferQueue 提供了一种高效的方式来处理生产者-消费者问题，同时保持线程安全。
*/
public class LinkedTransferQueueExample {
    //在这个例子中，生产者线程使用 transfer 方法传递一个事件，该方法会阻塞直到消费者线程接收了该事件。
    //消费者线程使用 take 方法从队列中接收事件。
    //这种机制确保了生产者和消费者之间的同步交换，适用于需要即时处理事件的场景。
    public static void main(String[] args) {
        LinkedTransferQueue<String> ltq = new LinkedTransferQueue<>();

        // 生产者线程
        Thread producer = new Thread(() -> {
            try {
                String event = "重要事件";
                ltq.transfer(event); // 传递元素，等待消费者接收
                System.out.println("生产者传递了一个事件: " + event);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        // 消费者线程
        Thread consumer = new Thread(() -> {
            try {
                // 等待并接收元素
                String event = ltq.take();
                System.out.println("消费者接收了一个事件: " + event);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        producer.start();
        consumer.start();
    }
}

